package main

import "fmt"

func main() {
	//1、golang中定义字符	字符属于int类型
	//var a = 'a'
	//fmt.Printf("值：%v 类型：%T", a, a)	//值：97 类型：int32
	//当我们直接输出byte（字符）的时候输出的是这个字符对应的编码值

	//2、原样输出字符
	//var a = 'a'
	//fmt.Printf("值：%c 类型：%T", a, a) //值：a 类型：int32

	//3、定义一个字符串输出字符串里面的字符
	//var str = "this is str"
	//fmt.Printf("值：%v 原样输出%c 类型：%T", str[2], str[2], str[2]) //值：105 类型：uint8

	//4、一个汉字占用3个字节(utf-8)，一个字母占用一个字节

	//unsafe.Sizeof() 没法查看string类型数据所占用的存储空间
	//var str = "this" //占用4个字节
	//fmt.Println(unsafe.Sizeof(str))

	//var str = "你好go"
	//fmt.Println(len(str)) //8个字节

	//5、定义一个字符，字符的值是一个汉字
	//golang中汉字使用的是utf8编码 编码后的值就是int类型
	//var str = '国'
	//fmt.Printf("值：%v，原样输出：%c，类型：%T", str, str, str)

	//6、通过循环输出字符串里面的字符
	//str := "golang"
	//for i := 0; i < len(str); i++ {	//byte
	//	fmt.Printf("%v(%c) ", str[i], str[i])
	//}

	//循环字符串用range循环
	//str := "你好golang"
	//for _, r := range str { //rune
	//	fmt.Printf("%v(%c) ", r, r)
	//}

	//7、修改字符串
	//字符转换（无汉字）
	//s1 := "big"
	////强制类型转换
	//byteStr := []byte(s1)
	//byteStr[0] = 'p'
	//s1 = string(byteStr)
	//
	//fmt.Println(s1)

	//字符转换（汉字）
	s1 := "你好golang"
	runeStr := []rune(s1)
	runeStr[0] = '您'
	s1 = string(runeStr)
	fmt.Println(s1)

}
